﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ControleFinanceiro.Dominio.Entidades;

namespace ControleFinanceiro.Tests.Dominio
{
  [TestClass]
  public class Dado_Uma_Nova_Conta
  {
    Conta conta;
    string numero = "04251";
    string agencia = "222222";
    Banco banco;

    [TestInitialize]
    public void Quando_Crio()
    {
      string codigo = "001";
      string nome = "Banco do Brasil";
      banco = new Banco(codigo, nome);
      conta = new Conta(banco,numero, agencia);
    }

    [TestMethod]
    public void A_Agencia_e_o_numero_Conta_nao_podem_ser_nulos()
    {
      Assert.AreNotEqual(null, conta.Agencia);
      Assert.AreNotEqual(null, conta.Numero);
    }

    [TestMethod]
    public void O_Saldo_tem_que_ser_zero()
    {
      Assert.AreEqual(0, conta.Saldo);
    }
  }

  [TestClass]
  public class Dado_Uma_Conta
  {
    Conta conta;
    string numero = "04251";
    string agencia = "222222";
    Banco banco;

    [TestInitialize]
    public void Quando_Movimento()
    {
      string codigo = "001";
      string nome = "Banco do Brasil";
      banco = new Banco(codigo, nome);
      conta = new Conta(banco,numero, agencia);
    }

    [TestMethod]
    public void Creditando_10_sendo_Saldo_0_o_valor_atualizado_eh_10()
    {
      conta.Creditar(10);
      Assert.AreEqual(10, conta.Saldo);
    }

    [TestMethod]
    public void Debitando_10_sendo_Saldo_30_o_valor_atualizado_eh_20()
    {
      conta.Creditar(30);
      conta.Debitar(10);
      Assert.AreEqual(20, conta.Saldo);
    }

    [TestMethod]
    [ExpectedException(typeof(SaldoInvalidoException))]
    public void Debitando_um_valor_maior_que_o_saldo()
    {
      conta.Creditar(5);
      conta.Debitar(10);
    }
  }


}
